/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.cliente;

import com.perutaxi.entidades.eCliente;
import com.perutaxi.entidades.eClienteReclamo;
import com.perutaxi.entidades.eClienteServicio;
import com.perutaxi.negocio.nCliente;
import com.perutaxi.negocio.nClienteReclamo;
import com.perutaxi.negocio.nClienteServicio;
import com.perutaxi.segu.SessionMBean;
import com.perutaxi.util.GenericMBean;
import java.io.Serializable;
import java.util.Calendar;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import org.primefaces.model.chart.CartesianChartModel;
import org.primefaces.model.chart.ChartSeries;

/**
 *
 * @author PeruTaxi
 */
@ManagedBean
@SessionScoped
public class InicioMBean extends GenericMBean implements Serializable {

    @ManagedProperty(value = "#{sessionMBean}")
    private SessionMBean sessionMBean;
    private List<eClienteServicio> listaUltimosServicios;
    private List<eClienteReclamo> listaUltimosReclamos;
    private List<eClienteServicio> listaServiciosAnioActual;
    private eCliente cliente;
    private final String url = "/cliente/inicio.xhtml";
    private int anioActual;
    private String[] listaMeses = {"ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SETIEMBRE",
        "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"};
    private int[] cantidades = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
    private CartesianChartModel model;

    public InicioMBean() {
    }

    public String iniciar() {

        return this.url;
    }

    private void listadoAnioActual() {
        for (int i = 0; i < this.cantidades.length; i++) {
            cantidades[i] = 0;
        }
        String fechaInicio = "01/01/" + getAnioActual();
        String fechaFin = "31/12/" + getAnioActual();
        try {
            this.listaServiciosAnioActual = nClienteServicio.obtenerServiciosDelAnio(fechaInicio, fechaFin, this.cliente.getId());
            for (eClienteServicio x : this.listaServiciosAnioActual) {
                Calendar calendario = Calendar.getInstance();
                calendario.setTime(x.getFechaServicio());
                int mes = calendario.get(Calendar.MONTH);
                cantidades[mes] = cantidades[mes] + 1;
            }
        } catch (Exception e) {
            showError(e.getMessage());
        }
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<eClienteServicio> getListaUltimosServicios() throws Exception {
        this.cliente = nCliente.obtenerPorIdUser(this.sessionMBean.getSessionUsuario().getId());
        this.listaUltimosServicios = nClienteServicio.obtenerMisUltimosServicios(this.cliente.getId());

        return this.listaUltimosServicios;
    }

    public void setListaUltimosServicios(List<eClienteServicio> listaUltimosServicios) {
        this.listaUltimosServicios = listaUltimosServicios;
    }

    public eCliente getCliente() {
        return cliente;
    }

    public void setCliente(eCliente cliente) {
        this.cliente = cliente;
    }

    public List<eClienteReclamo> getListaUltimosReclamos() throws Exception {
        this.cliente = nCliente.obtenerPorIdUser(this.sessionMBean.getSessionUsuario().getId());
        this.listaUltimosReclamos = nClienteReclamo.obtenerMisUltimosReclamos(this.cliente.getId());

        return this.listaUltimosReclamos;
    }

    public void setListaUltimosReclamos(List<eClienteReclamo> listaUltimosReclamos) {
        this.listaUltimosReclamos = listaUltimosReclamos;
    }

    public int getAnioActual() {
        Calendar calendario = Calendar.getInstance();
        return calendario.get(Calendar.YEAR);
    }

    public void setAnioActual(int anioActual) {
        this.anioActual = anioActual;
    }

    public List<eClienteServicio> getListaServiciosAnioActual() {
        return listaServiciosAnioActual;
    }

    public void setListaServiciosAnioActual(List<eClienteServicio> listaServiciosAnioActual) {
        this.listaServiciosAnioActual = listaServiciosAnioActual;
    }

    public CartesianChartModel getModel() {
        listadoAnioActual();
        model = new CartesianChartModel();
        ChartSeries servicios = new ChartSeries();
        servicios.setLabel("SERVICIOS");
        for (int i = 0; i < this.listaMeses.length; i++) {
            servicios.set(this.listaMeses[i], this.cantidades[i]);
        }
        
        model.addSeries(servicios);
        return model;
    }

    public void setModel(CartesianChartModel model) {
        this.model = model;
    }
}
